PARSER page# 0001 next
2: COMMENT ⊗   VALID 00005 PAGES
3: C REC  PAGE   DESCRIPTION
4: C00001 00001
5: C00002 00002    BEGIN PARSER ↔  SUBTTL  PARSER - PARITY ERROR SERVICE ROUTINE
6: C00006 00003            SUBTTL  HERE WE SEARCH FOR REAL ERRORS.
7: C00012 00004            SUBTTL  HERE WHEN A REAL ERROR IS FOUND.
8: C00026 00005            SUBTTL  P2 PARITY ERROR INTERRUPT
9: C00031 ENDMK
10: C⊗;
    PARSER page# 0002 next  prev
12: BEGIN PARSERSUBTTL  PARSER - PARITY ERROR SERVICE ROUTINE
13: ;R. E. GORIN 7 AUG 72.  
14: 
15: AP2CHL←CAT(P2CH,\APRCHN)
16: 
17: PARCLK:                                ;CALLED BY:     SKIPE   PARFLG
18:                                         ;               PUSHJ   P,PARCLK
19:         CONO    PI,APROFF               ;TURN OFF APR TO AVOID TIMING ERRORS
20:         SETOM   P2RFLG                  ;SET SECOND LEVEL FLAG
21:         SETZM   PARFLG                  ;CLEAR PRIMARY FLAG
22:         JRST    PARIN0                  ;JOIN PARITY ERROR INTERRUPT CODE
23: 
24: PARINT:                                ;HERE FROM APR CHANNEL FOR P1 PARITY ERROR,
25:         CONO    PI,APROFF               ;TURN OFF APR SO WE CAN TEST FOR BAD PARITY.
26: PARIN0: MOVEM   P,PARPSAV               ;ASSUME WE HAVE NO AC'S.
27:         MOVE    P,APRPDL                ;GET A STACK.
28:         PUSHACS                         ;SAVE ALL THE AC'S
29:         MOVEI   PID,P1PID               ;SET PROCESSOR IDENTIFICATION
30:         PUSHJ   P,DISCRLF               ;START STUFFING THE TYPEOUT BUFFER
31:         PUSHJ   P,DISDATE               ;ANNOUNCE THE DATE AND TIME
32:         SKIPN   P2RFLG                  ;IS THE PDP-6 HALUCINATING AGAIN?
33:         JRST    PARIN1                  ;NO IT MUST BE P1
34: 
35:         PUSHJ   P,DISMES                ;BLAME ON THE STONES
36:         ASCIZ   /πππππPDP-6 DETECTED PARITY ERROR.  PC  = /
37:         MOVE    TAC,AP2CHL              ;GET THE PC OF PDP-6'S ERROR.
38:         TLNE    TAC,USRMOD              ;IS THIS IN USER MODE?
39:         TRNN    TAC,777760              ;YES. IS THIS ABOVE THE AC'S
40:         JRST    PARIN3                  ;EXEC MODE OR RUNNING IN THE AC'S
41:         HRRZ    TAC1,LASTPR+P2PID       ;GET CURRENT RELOCATION DATA
42:         ANDI    TAC1,776000             ;LOWER PART OF THE RELOCATION ONLY
43:         ADDI    TAC,(TAC1)              ;ADD RELOCATION
44:         JRST    PARIN3                  ;SAVE ERROR PC AND PRINT IT.
45: 
46: PARIN1: PUSHJ   P,DISMES                ;HERE FOR P1 PARITY ERROR
47:         ASCIZ   /πππππPARITY ERROR.  PC = /
48:         MOVE    TAC,APRCHL              ;GET THE PC FROM 
49:         TLNE    TAC,USRMOD              ;IS THIS IN USER MODE?
50:         TRNN    TAC,777760              ;YES. IS THIS ABOVE THE AC'S
51:         JRST    PARIN3                  ;EXEC MODE OR RUNNING IN THE AC'S
52:         TRNN    TAC,400000              ;POSSIBLE UPPER?
53:         JRST    PARIN2                  ;NO THIS HAS TO BE A LOWER.
54:         HRRZ    TAC1,APRCHL             ;GET THE USER MODE PC.
55:         HLRZ    AC3,LASTPR+P1PID        ;GET THE CURRENT PROTECTION
56:         TRO     AC3,1777                ;TURN ON LOW ORDER BITS.
57:         CAIG    TAC1,(AC3)              ;IS THIS PC IN THE LOWER?
58:         JRST    PARIN2                  ;YES
59:         CAIGE   AC3,400000              ;IS THE LOWER GREATER THAN 128K (HA HA)
60:         MOVEI   AC3,400000              ;NO. THIS IS THE NUMBER TO SUBTRACT FROM PC
61:         SUBI    TAC,(AC3)               ;LEAVING RELATIVE PC IN UPPER
62:         HRRZ    AC3,LASTPR+P1PID        ;GET THE RELOCATION
63:         LSH     AC3,=9                  ;SHIFT IT TO SELECT RELOC OF UPPER.
64:         ANDI    AC3,776000              ;MASK
65:         TRC     AC3,400000              ;UN-BUGGER IT -- RPH 2-7-73
66:         ADDI    TAC,(AC3)               ;ADD IT TO THE PC.
67:         MOVEM   TAC,ERRPC               ;SAVE ERROR PC.
68:         PUSHJ   P,DISMES
69:         ASCIZ   /#/                     ;DENOTE BY THIS A PC IN THE UPPER
70:         JRST    PARIN4
71: 
    PARSER page# 0003 next  prev
73:         SUBTTL  HERE WE SEARCH FOR REAL ERRORS.
74: PARIN2: HRRZ    TAC1,LASTPR+P1PID       ;GET CURRENT RELOCATION DATA
75:         ANDI    TAC1,777000             ;LOWER PART OF RELOCATION
76:         ADDI    TAC,(TAC1)              ;ADD RELOCATION
77: PARIN3: MOVEM   TAC,ERRPC               ;SAVE ERROR PC.
78: PARIN4: PUSHJ   P,DISOCT                ;WRITE THE ERROR PC
79:         PUSHJ   P,DISCRLF               ;AND A CRLF
80: 
81:         CONO    PI,@PARCON              ;TURN OFF ERROR FLAG.
82:         SETOM   ERRLOC                  ;SET TO SIGNIFY NONE FOUND YET.
83:         SETOM   LASLOS                  ;JOB NUMBER OF LAST LOSER FOUND.
84:         SETZB   TAC1,PARSJN
85:         SETZM   SYSERR                  ;ASSUME NO ERRORS SYSTEM CORE.
86:         MOVE    TAC,ERRPC               ;GET THE ERROR PC
87:         TLNE    TAC,USRMOD              ;USER MODE?
88:         JRST    PARIN5                  ;YES.
89:         SETOM   SYSERR                  ;EXEC MODE. PROBABLE SYSTEM ERROR.
90:         ANDI    TAC,-1                  ;PC ONLY
91:         CAIE    TAC,SHFBLT              ;IS THIS THE BLT IN THE SHUFFLER?
92:         CAIN    TAC,SHFBLT+1            ;OR POSSIBLY HERE.
93:         MOVE    TAC1,PARSJB             ;SHUFFLE OPERATION. GET THE JOB NUMBER
94:         MOVEM   TAC1,PARSJN             ;SET FLAG IF A SHUFFLER OPERATION.
95: 
96: PARIN5: SETZM   ERRJOB                  ;ZERO OUR TABLE OF LOSING JOBS
97:         SETZM   ERRJOB+1                ;
98: 
99: REPEAT 0,<                              ;12/3/73
100:         CONI    APR,TAC                 ;GET STATE OF SYS WR REF KLUGE
101:         HRRM    TAC,SYSERR              ;SAVE IN RIGHT SIDE OF SYSERR.
102:         DATAO   PTR,[0]                 ;DISABLE SYS WR REF KLUGE.
103: >
104: 
105:         MOVE    TAC1,RMEMSIZ            ;GET SIZE OF REAL MEMORY
106:         CAILE   TAC1,400000             ;IS IT SMALL ENOUGH FOR ONE AOBJN?
107:         MOVEI   TAC1,400000             ;NO. WE'LL DO THIS MUCH AT ONCE.
108:         MOVNI   TAC1,-20(TAC1)          ;OFFSET TO SKIP ACS
109:         HRLZ    TAC1,TAC1               ;SWAP COUNT
110:         HRRI    TAC1,20                 ;OFFSET PAST ACS
111:         MOVEI   AC3,@PARCON             ;GET THE MASK FOR THE CONO
112: PARL0:  MOVE    0,(TAC1)                ;LOOK AT MEMORY
113:         CONSO   PI,(AC3)                ;SKIP IF ERROR
114: PARL1:  AOBJN   TAC1,PARL0              ;LOOP AND COUNT
115:         JUMPGE  TAC1,PARL2              ;JUMP IF COUNT WAS EXHAUSTED.
116:         CONO    PI,(AC3)                ;SHUT OFF ERROR INDICATOR.
117:         MOVEM   0,(TAC1)                ;STORE GOOD PARITY IN MEMORY
118:         PUSH    P,TAC1                  ;HAVE TO SAVE THIS FOR LATER.
119:         PUSHJ   P,PARERF                ;PARITY ERROR FOUND
120:         POP     P,TAC1                  ;RESTORE COUNTER
121:         MOVEI   AC3,@PARCON             ;RESTORE CONO MASK
122:         JRST    PARL1                   ;RESTORE COUNT AND REJOIN THE LOOP.
123: 
124: PARL2:  MOVE    TAC1,RMEMSIZ            ;GET THE SIZE OF OUR MEMORY
125:         CAIG    TAC1,400000             ;IS IT TOO BIG TO HAVE BEEN SEARCHED?
126:         JRST    PARL5                   ;SMALL MEMORY HAS ALL BEEN SEARCHED.
127:         SUBI    TAC1,400000             ;LEAVE US WITH COUNT OF HOW MUCH TO LOOK AT
128:         MOVN    TAC1,TAC1               ;NEGATE
129:         HRLZ    TAC1,TAC1               ;SWAP
130:         HRRI    TAC1,400000             ;OFFSET TO UPPER REACHES OF MEMORY
131:         MOVEI   AC3,@PARCON             ;GET MASK FOR CONSO/CONO
132: PARL3:  MOVE    0,(TAC1)
133:         CONSO   PI,(AC3)                ;ANY ERROR?
134: PARL4:  AOBJN   TAC1,PARL3              ;LOOP
135:         JUMPGE  TAC1,PARL5              ;JUMP IF ALL DONE
136:         CONO    PI,(AC3)                ;SHUT OFF ERROR INDICATORS
137:         MOVEM   0,(TAC1)                ;STORE GOOD PARITY IN MEMORY.
138:         PUSH    P,TAC1                  ;SAVE COUNTER
139:         PUSHJ   P,PARERF                ;SERVICE THIS ERROR
140:         POP     P,TAC1
141:         MOVEI   AC3,@PARCON             ;RESTORE CONSO/CONO MASK
142:         JRST    PARL4                   ;AND RETURN TO LOOP
143: 
144: PARL5:  SKIPL   ERRLOC                  ;HAS THIS BEEN SET UP?
145:         JRST    PARL6                   ;YES. WE MUST HAVE PRINTED SOMETHING
146:         PUSHJ   P,DISMES                ;WE DIDN'T FIND ANY.
147:         ASCIZ   /LOCATION INDETERMINATE
148: /
149:         PUSHJ   P,ZSHAD                 ;ZERO SHADOW MEMORY IN CASE WE LOST THERE.
150:         JFCL                            ;SKIPS IF NO FAST ACS
151:         HRROS   SYSERR                  ;CHECK THE SYSTEM.   DEPT. OF REDUNDANCY DEPT.
152: PARL6:
153:         MOVE    TAC,SYSERR              ;ERROR IN SYSTEM CORE?
154: REPEAT 0,<                              ;12/1/73
155:         TRNE    TAC,SWRENB              ;WAS SYS WR REF KLUGE ENABLED?
156:         DATAO   PTR,[1]                 ;YES. RE-ENABLE IT
157: >
158:         JUMPGE  TAC,PARL7               ;JUMP IF ERROR WAS NOT IN SYSTEM
159:         PUSHJ   P,SYSFIX                ;JUST IN CASE WE NEED THIS
160:         JFCL                            ;NO ERROR
161:         JFCL                            ;ERROR AND DIDN'T FIX
162:                                         ;ALL FIXED.
163: PARL7:  PUSHJ   P,DISCRLF
164:         POPACS                          ;RESTORE ALL THE AC'S THAT WE SAVED
165:         MOVE    P,PARPSAV               ;GET STACK BACK (OR WHATEVER WAS IN IT).
166:         SKIPN   P2RFLG                  ;WAS THIS THE PDP-6 HACKING?
167:         JRST    PARL9                   ;NO. THIS WAS THE PDP-10
168:         SETZM   P2RFLG                  ;CLEAR ERROR FLAG 
169:         CONO    PI,APRON                ;RESTORE INTERRUPT SYSTEM
170:         POPJ    P,                      ;RETURN TO P1 CLOCK LEVEL
171: 
172: PARL9:  CONO    PI,APRON                ;TURN ON THE APR CHANNEL
173:         JEN     @APRCHL                 ;DISMISS THIS INTERRUPT
174: 
175: 
    PARSER page# 0004 next  prev
177:         SUBTTL  HERE WHEN A REAL ERROR IS FOUND.
178: PARERF: MOVE    TAC,ERRLOC              ;REMEMBER OLD VALUE OF ERRLOC
179:         HRRZM   TAC1,ERRLOC             ;SAVE PRESENT ERROR LOCATION
180:         JUMPGE  TAC,PARER1              ;JUMP IF THIS IS NOT THE FIRST TIME HERE.
181:         PUSHJ   P,DISMES                ;PUT OUT THE HEADING
182:         ASCIZ   /LOC    DATA            RELOC   NAME(J)
183: /
184: PARER1: HRRZ    TAC,ERRLOC              ;GET LOCATION
185:         PUSHJ   P,DISLOC                ;WRITE LOCATION
186:         PUSHJ   P,DISTAB                ;WRITE A TAB
187:         HRRZ    TAC,ERRLOC              ;GET LOCATION
188:         MOVE    TAC,(TAC)               ;GET DATA
189:         PUSHJ   P,DISOCH                ;WRITE LOSING DATA AS OCTAL HALF WORDS
190:         PUSHJ   P,DISTAB                ;PUT NEXT THING UNDER HEADING
191:         HRRZ    DSER,ERRLOC             ;GET THE LOCATION AGAIN (LOC = DSER)
192:         PUSHJ   P,CORGBP                ;MAKE A BYTE POINTER TO CORTAB
193:         ILDB    J,TAC                   ;LOAD JOB NUMBER INTO J
194:         CAIGE   J,JOBN                  ;IS THIS A SPECIAL CODE?
195:         JUMPG   J,PARER4                ;JUMP IF CORE IS ASSIGNED TO NORMAL JOB
196:         SKIPE   PARSJN                  ;ARE WE IN A SHUFFLE?
197:         JUMPE   J,PARR4B                ;YES.  JUMP IF ALLEGED UNASSIGNED CORE.
198: PARR1A: CAMN    J,LASLOS                ;SAME AS LAST LOSER?
199:         JRST    DISCRLF                 ;YES. JUST TYPE A CRLF AND RETURN
200:         MOVEM   J,LASLOS                ;SAVE CODE FOR LAST LOSER
201:         JUMPG   J,PARER2                ;JUMP IF NOT UNASSIGNED CORE
202:         PUSHJ   P,DISMES                ;FOR UNASSIGNED CORE
203:         ASCIZ   /UNUSED
204: /
205:         POPJ    P,                      ;RETURN LOOK FOR MORE.
206: 
207: PARER2: CAIE    J,101                   ;IS THIS THE SYSTEM?
208:         JRST    PARER3                  ;NO. MUST BE FREE STORAGE.
209:         HRROS   SYSERR                  ;REMEMBER TO CHECKSUM THE SYSTEM
210:         PUSHJ   P,DISMES
211:         ASCIZ   /SYS
212: /
213:         POPJ    P,
214: 
215: PARER3: PUSHJ   P,DISMES
216:         ASCIZ   /FS
217: /
218:         POPJ    P,
219: 
220: 
221: PARR4B: MOVE    J,PARSJN                ;JOB NUMBER OF GUY BEING SHUFFLED.
222:         HRRZ    TAC,PARBLK              ;GET LOC OF OLD CORE
223:         SUBI    DSER,(TAC)              ;MAKE RELATIVE LOCATION.
224:         JUMPL   DSER,PARR4C             ;THIS ISN'T PART OF THE OLD CORE.
225:         HLRZ    TAC,PARBLK              ;GET SIZE OF OLD CORE
226:         CAILE   DSER,(TAC)              ;SKIP IF ERROR IS IN OLD SHUFFLED CORE.
227: PARR4C: MOVEI   J,0
228:         JUMPE   J,PARR1A                ;TREAT THIS AS UNUSED CORE.
229: PARER4: PUSH    P,J                     ;SAVE JOB NUMBER
230:         HRRZ    TAC1,JBTADR(J)          ;GET THE BASE ADDRESS OF THIS JOB
231:         CAMN    J,PARSJN                ;THIS JOB SHUFFLE IN PROGRESS?
232:         HRRZ    TAC1,PARBLK             ;YES. GET THE OLD JOB LOCATION.
233:         HRRZ    TAC,ERRLOC              ;GET THE ERROR LOCATION
234:         SUBI    TAC,(TAC1)              ;FORM THE USER RELATIVE ADDRESS
235:         MOVEM   TAC,RERLOC              ;SAVE RELOCATED ERROR LOCATION.
236:         PUSHJ   P,DISLOC                ;TYPE 6 CHARACTERS
237:         MOVE    J,(P)                   ;GET THE JOB NUMBER INTO J AGAIN
238:         CAMN    J,LASLOS                ;SAME AS LAST TIME?
239:         JRST    PARR4A                  ;YES. DON'T TELL JOB NAME AGAIN
240:         MOVEM   J,LASLOS                ;REMEMBER FOR NEXT TIME
241:         PUSHJ   P,DISTAB                ;TYPE A TAB FOR SEPARATION
242:         MOVE    J,(P)                   ;MAKE SURE NO ONE CLOBBERS J.
243:         PUSHJ   P,DISJOB                ;TYPE JOB NUMBER(JOB NAME)
244:         CAME    J,PARSJN                ;IS THIS A SHUFFLE OPERATION?
245:         JRST    PARR4A
246:         PUSHJ   P,DISMES
247:         ASCIZ   /       SHUFFLE/
248: PARR4A: PUSHJ   P,DISCRLF
249:         MOVE    J,(P)                   ;RESTORE J (AGAIN) 
250:         MOVE    TAC,JBTSTS(J)           ;GET THE JOB STATUS WORD
251:         TLNN    TAC,JSEG                ;IS THIS REALLY AN UPPER?
252:         JRST    PARER8                  ;NO, JUST A SIMPLE LOWER.
253:         PUSHJ   P,MARKERR               ;HAS THIS UPPER LOST BEFORE (OR IS IT FIXABLE)?
254:         JRST    TPOPJ                   ;YES. DON'T TELL LOWERS AGAIN
255:         MOVEI   TAC,400000              ;IN CASE OF A SEGMENT
256:         ADDM    TAC,RERLOC              ;ADD 400000 TO RELOCATED ERROR ADDRESS
257:         MOVEI   J,JOBN-1                ;FOR ALL THE JOBS IN THE WORLD....
258: PARER5: LDB     TAC,PSEGN               ;GET THE JOB NUMBER OF THIS GUY'S UPPER
259:         CAME    TAC,(P)                 ;SAME AS THIS UPPER?
260:         SOJG    J,PARER5                ;NO.
261:         JUMPLE  J,PARER6                ;JUMP IF NO MORE USERS OF THIS UPPER
262:         PUSH    P,J                     ;SAVE THIS JOB ON THE STACK
263:         PUSHJ   P,TELUSR                ;TELL A LOWER SEGMENT.
264:         POP     P,J
265:         SOJG    J,PARER5                ;DECREMENT J AND LOOK FOR MORE.
266: PARER6: POP     P,J                     ;GET THE NUMBER OF THIS UPPER.
267:         MOVE    TAC,PRJPRG(J)           ;GET A RIDICULOUS NAME
268:         MOVEM   TAC,JOBNAM(J)           ;SAVE IT AS THE JOB NAME
269:         POPJ    P,                      ;NO ONE WILL ATTACH TO THIS AGAIN.
270: 
271: PARER8: PUSHJ   P,TELUSR                ;TELL THE USER ABOUT WHAT BEFELL HIM
272:         JRST    TPOPJ                   ;ADJUST STACK AND RETURN.
273: 
274: TELUSR: PUSHJ   P,MARKERR               ;MARK THIS JOB HAS ERROR
275:         POPJ    P,                      ;HE'S BEEN TOLD BEFORE.
276:         MOVSI   TAC,INTPAR              ;PICKUP PARITY ERROR ENABLE BIT
277:         TDNN    TAC,JBTIEN(J)           ;IS THIS USER ENABLED FOR THIS?
278:         JRST    TELUS1                  ;NO. TELL HIM AND STOP HIM
279:         IORM    TAC,JBTIRQ(J)           ;SET PARINT BIT FOR THIS USER
280:         SETOM   INTREQ(PID)             ;REQUEST A USER INTERRUPT
281:         MOVE    TAC1,RERLOC             ;GET THE RELOCATED ADDRESS OF ERROR
282:         MOVEM   TAC1,INTDTM(J)          ;SAVE IT FOR THIS USER.
283:         CONO    PI,1B24!1(7-CLKCHN)     ;REQUEST INTERRUPT ON CLOCK CHANNEL
284:         POPJ    P,
285: 
286: TELUS1: PUSHJ   P,TTYERR                ;GET THE USER'S TTY
287:         MOVE    TAC,RERLOC
288:         HLRZ    AC3,JBTADR(J)
289:         CAMN    J,PARSJN                ;SHUFFLED JOB?
290:         HLRZ    AC3,PARBLK              ;YES. USE THIS ADDRESS.
291:         CAILE   TAC,(AC3)               ;IN LOWER?
292:         JRST    TELUS2                  ;NO. IT IS IN THE UPPER
293:         PUSHJ   P,INLMES                ;STUFF DATA INTO TTY
294:         ASCIZ   /PARITY ERROR IN YOUR CORE IMAGE. LOC = /
295:         JRST    TELUS3
296: 
297: TELUS2: PUSHJ   P,INLMES
298:         ASCIZ   /PARITY ERROR IN YOUR UPPER SEGMENT. LOC = /
299: TELUS3: MOVE    TAC,RERLOC              ;GET THE RELOCATED ERROR
300:         PUSHJ   P,OCTPNT                ;TELL HIM THE LOCATION.
301:         PUSHJ   P,PRCRCC
302:         PUSHJ   P,TTYSTR                ;START THE USER'S TTY TYPING
303:         SKIPL   JBTSTS(J)               ;IS THIS GUY RUNNABLE?
304:         POPJ    P,                      ;NO.
305: TELSTP: MOVE    TAC,JBTSTS(J)
306:         TLNE    TAC,JLOG                ;LOGGED IN?
307:         JRST    STOP1                   ;YES. JUST STOP IT.
308:         JRST    ESTOP                   ;NO. KILL THE PHANTOM
309: 
310: ;CALL THIS ROUTINE TO SEE IF HE NEEDS TO BE TOLD
311: ;WILL TRY TO REPEAT SWAPIN IF POSSIBLE
312: 
313: MARKERR:                                ;PUSHJ HERE TO MARK JOB IN J AS HAVING ERROR.
314:         JUMPLE  J,CPOPJ                 ;IMPOSSIBLE JOB NUMBER
315:         CAIL    J,JOBN
316:         POPJ    P,                      ;IMPOSSIBLE JOB, UNNATURAL ACTS
317:         MOVEI   TAC,(J)                 ;GET JOB NUMBER
318:         SETZ    TAC1,
319:         LSHC    TAC,-5
320:         ROT     TAC1,5
321:         MOVEI   AC3,1
322:         ROT     AC3,-20(TAC1)           ;ROTATE TO AN UNUSUAL POSITION
323:         TDNE    AC3,ERRJOB(TAC)         ;IS THIS BIT SET ALREADY?
324:         POPJ    P,                      ;YES.
325:         IORM    AC3,ERRJOB(TAC)         ;NO. SET IT
326:         MOVE TAC,RERLOC
327:         HLRZ AC3,JBTADR(J)
328:         CAIG TAC,(AC3)          ;CAN'T FIX HIS UPPER HERE
329:         SKIPE STIME(J)          ;NOW SEE IF THE SWAPPER CAN FIX IT
330:         JRST CPOPJ1             ;MODIFIED SINCE SWAPIN
331:         HLRZ TAC,JBTSWP(J)
332:         JUMPE TAC,CPOPJ1        ;NOT SWAPPED OUT YET
333:         SKIPN XJOB(J)
334:         AOS XJOB
335:         AOS XJOB(J)             ;THIS SHOULD MAKE IT GET SWAPPED
336:         POPJ P,
    PARSER page# 0005 next  prev
338:         SUBTTL  P2 PARITY ERROR INTERRUPT
339: P2RINT:
340:         CONO    PI,@P2RCON              ;ZERO ERROR BIT
341:         MOVEM   TAC,P2SA                ;SAVE TAC
342:         MOVEI   TAC,17                  ;SCAN THE AC'S
343:         MOVES   (TAC)
344:         SOJGE   TAC,.-1                 ;LOOP
345:         CONSZ   PI,@P2RCON              ;IS THAT WHERE IT IS?
346:         JRST    PARACS                  ;YES
347:         SETOM   PARFLG                  ;NO, TELL THE TEN
348:         MOVE    TAC,PARFLG              ;WAIT FOR THE PDP-10 TO SEE THE FLAG
349:         JUMPN   TAC,.-1                 ;WAIT UNTIL IT GOES ZERO
350:         MOVE    TAC,P2RFLG              ;WAIT FOR THE PDP-10 TO FINISH PARSER
351:         JUMPN   TAC,.-1                 ;
352:         JRST    P2ROUT                  ;RESTORE TAC AND DISMISS
353: PARACS: CONO    PI,@P2RCON              ;CLEAR PARITY ERROR
354: P2ROUT: MOVE    TAC,P2SA                ;RESTORE ACCUMULATOR
355:         JEN     @AP2CHL                 ;DISMISS INTERRUPT
356: 
357: BEND    PARSER
 EOF: PARSER end-of-file. cnt=4